原文:Neural ordinary differential equations

NIPS2018最佳论文

简介

简单复习一下ResNet:

image.png

通过残差块解决反向传播过程中的梯度消失问题

ResNet、RNN、Normalizing flow 等模型都是这种形式:

ht+1=ht+f(ht,θt)h_{t+1}=h_t+f(h_t,\theta_t)

如果采用更多的层数和更小的步长,可以优化为一个常微分方程:

dh(t)dt=f(h(t),t,θ)\frac{d \mathbf{h}(t)}{d t}=f(\mathbf{h}(t), t, \theta)

这就是ODE Net的核心idea了……下面进行具体的分析

给定常微分方程,数学理论上可以对其进行解析法求解,但通常我们只关心数值解:在已知h(t0)h(t_0) 的情况下,求出h(t1)h(t_1) 。这在神经网络里对应的是正向传播。用ResNet对比一下:

ResNet的正向传播:

ht+1=ht+f(ht,θt)h_{t+1}=h_t+f(h_t,\theta_t)

ODE网络的正向传播:

dh(t)dt=f(h(t),t,θ)t0t1dh(t)=t0t1f(h(t),t,θ)dth(t1)=h(t0)+t0t1f(h(t),t,θ)dt\begin{array}{c} \frac{d h(t)}{d t}=f(h(t), t, \theta) \\ \int_{t_{0}}^{t_{1}} d h(t)=\int_{t_{0}}^{t_{1}} f(h(t), t, \theta) d t \\ h\left(t_{1}\right)=h\left(t_{0}\right)+\int_{t_{0}}^{t_{1}} f(h(t), t, \theta) d t \end{array}

求解这个常微分方程数值解的方法有很多,最原始的是欧拉法:固定Δt\Delta t ,通过逐步迭代来求解:

h(t+Δt)=h(t)+Δtf(h(t),t,θ)h(t+\Delta t)=h(t)+\Delta t * f(h(t),t,\theta)

我们看到,如果令Δt=1\Delta t=1 ,离散化的欧拉法就退化成残差模块的表达式,也就是说ResNet可以看成是ODENet的特殊情况。 但欧拉法只是解常微分方程最基础的解法,它每走一步都会产生误差,并且误差会层层累积起来。近百年来,在数学和物理学领域已经有更成熟的ODE Solve方法,它们不仅能保证收敛到真实解,而且能够控制误差,本文在不涉及ODE Solve内部结构的前提下(将ODE Solve作为一个黑盒来使用),研究如何用ODE Solve帮助机器学习。

这篇文章使用了一种适应性的ODE solver,它不像ResNet那样固定步长,而是根据给定的误差容忍度自动调整步长,黑色的评估位置可以视作神经元,他的位置也会根据误差容忍度自动调整:

image.png

使用ODENet的几个好处(和原文不完全一致,详细可看原文):

  • 一般的神经网络利用链式法则,将梯度从最外层的函数逐层向内传播,并更新每一层的参数θ\theta ,这就需要在前向传播中需要保留所有层的激活值,并在沿计算路径反传梯度时利用这些激活值。这对内存的占用非常大,层数越多,占用的内存也越大,这限制了深度模型的训练过程。 本文给出的用ODENet反向传播的方法不存储任何中间过程,因而不管层数如何加深,只需要常数级的内存成本。
  • 自适应的计算。传统的欧拉法会有误差逐层累积的缺陷,而ODENet可以在训练过程中实时的监测误差水平,并可以调整精度来控制模型的成本。例如:在训练时我们可以使用较高的精度使训练的模型尽可能准确,而在测试时可以使用较低的精度,减少测试成本。
  • 应用在流模型上会极大简化变分公式的计算,在下文中详细讲解
  • 在时间上的连续性,好理解不展开

对于ODEnet在流模型上的应用,可以看一下论文FFJORD。

反向传播

在训练连续神经网络的过程中,正向传播可以使用ODE slove。但对ODE solve求导来进行反向传播求解梯度是很困难的,本篇文章使用Pontryagin的伴随方法(adjoint method) 来求解梯度,该方法不仅在计算和内存上有更大优势,同时还能够精确地控制数值误差。

具体而言,对于:

L(z(t1))=L(t0t1f(z(t),t,θ)dt)=L( ODESolve(z (t0),f,t0,t1,θ))(1)\left.L\left(\mathbf{z}\left(t_{1}\right)\right)=L\left(\int_{t_{0}}^{t_{1}} f(\mathbf{z}(t), t, \theta) d t\right)=L\left(\text { ODESolve(z }\left(t_{0}\right), f, t_{0}, t_{1}, \theta\right)\right)\tag{1}

为优化LL ,我们需要计算他对于参数z(t0),t0,t1z(t_0),t_0,t_1θ\theta 的梯度。

第一步是确定loss的梯度如何取决于隐藏状态z(t)z(t) 的变化,这在文章中被称作伴随a(t)a(t) (adjointa(t)adjoint \quad a(t) )

a(t)=L/z(t)a(t) = - \partial L / \partial \mathbf{z}(t)

这个a(t)a(t) 实际等价于反向传播算法中的梯度,可以由另一个ODE给定(证明补充在后面):

da(t)dt=a(t)f(z(t),t,θ)z(2)\frac{d a(t)}{d t}=-a(t)^{\top} \frac{\partial f(\mathbf{z}(t), t, \theta)}{\partial \mathbf{z}}\tag{2}

在传统的基于链式法则的反向传播过程中,我们将后一层对前一层进行求导以传递梯度(L/z(t0)=L/z(t1)z(t1)/z(t0)\partial L/\partial z(t_0)=\partial L/\partial z(t_1) * \partial z(t_1) / \partial z(t_0)),而在ODENet中,可以再次调用ODESolve计算L/z(t0)\partial L/\partial z(t_0)

对于计算相对于参数θ\theta 的梯度,公式类似:

dLdθ=t1t0a(t)f(z(t),t,θ)θdt(3)\frac{d L}{d \theta}=\int_{t_{1}}^{t_{0}} a(t)^{\top} \frac{\partial f(\mathbf{z}(t), t, \theta)}{\partial \theta} d t\tag{3}

这三个积分(带标号的三个)可以在同一个ODE solver过程中进行计算:

image.png

简单解释如何理解上面这个算法:

以前向传播为例,ODESolve(h(t0),f,t0,t1,θ)ODESolve(h(t_0),f,t_0,t_1,\theta) 表示求解常微分方程dh(t)dt=f(h(t),t,θ)\frac{d \mathbf{h}(t)}{d t}=f(\mathbf{h}(t), t, \theta) 的数值解h(t1)h(t_1)

将积分串联在一起以使用一次ODESolver解出所有量。

如果Loss不仅仅取决于最终状态,那么在用ODENet进行反向传播时,需要在这些状态中进行一系列的单独求解,每次都要调整算法中的 adjoint a(t)a(t)

image.png

用ODE网络替代ResNet

对图像进行两次下采样,然后分别应用六个残差块和一个ODENet进行对比:

RK-Net是用Runge-Kutta积分器,直接进行反向误差的传播

LL 表示ResNet的隐藏层数,L~\tilde{L} 表示调用ODESolve的次数。

误差控制,前向传播和反向传播的求值次数,网络深度表现在下图:

image.png

a:求值次数和精度成反比

b:求值次数与时间成正比

c:求值次数与反向传播时间成正比,并且反向传播的时间大概是正向传播的一半

d:网络深度,由于ODENet是一个连续网络,没有隐藏层,因此将评估点的数量作为深度,可以看到在训练过程中网络深度逐渐增加

连续的归一化流模型

流模型的解读在前一篇博客中

流模型使用一个可逆函数ff 进行两个分布之间的映射,变换前后的两个分布满足变量代换定理:

z1=f(z0)logp(z1)=logp(z0)logdetfz0\mathrm{z}_{1}=f\left(\mathrm{z}_{0}\right) \Longrightarrow \log p\left(\mathrm{z}_{1}\right)=\log p\left(\mathrm{z}_{0}\right)-\log \left|\operatorname{det} \frac{\partial f}{\partial \mathrm{z}_{0}}\right|

平面归一化流(NICE之后的一篇流模型的文章,这篇论文没看……)使用的变换:

z(t+1)=z(t)+uh(wz(t)+b),logp(z(t+1))=logp(z(t))log1+uhz\mathbf{z}(t+1)=\mathbf{z}(t)+u h\left(w^{\top} \mathbf{z}(t)+b\right), \quad \log p(\mathbf{z}(t+1))=\log p(\mathbf{z}(t))-\log \left|1+u^{\top} \frac{\partial h}{\partial \mathbf{z}}\right|

在流模型中,为使f/z\partial f/\partial z 的雅可比行列式易于计算,通常是通过精心构建函数ff 来实现。并且ff 还需要是可逆的。而在这篇文章里发现,将离散的流模型换成连续流模型,可以极大的简化计算:不需要去计算f/z\partial f/ \partial z 的行列式,只需要计算迹,并且不需要构建ff 可逆:ff 可以是任意函数,它是天然可逆的(常微分方程决定的函数只要满足唯一性,就一定是双射的),因此ff 理论上可以是任何网络。

核心定理(梯度变元定理):

image.png

证明过程见附录

于是我们将平面归一化流模型连续化:

dz(t)dt=uh(wz(t)+b),logp(z(t))t=uhz(t)\frac{d \mathbf{z}(t)}{d t}=u h\left(w^{\top} \mathbf{z}(t)+b\right), \quad \frac{\partial \log p(\mathbf{z}(t))}{\partial t}=-u^{\top} \frac{\partial h}{\partial \mathbf{z}(t)}

不同于求行列式的值,求迹还是一个连续函数,因此如果常微分方程dz/dtdz/dt 是由一组函数的和给出的,那么对数概率密度也可以直接用迹的和表示:

dz(t)dt=n=1Mfn(z(t)),dlogp(z(t))dt=n=1Mtr(fnz)\frac{d \mathbf{z}(t)}{d t}=\sum_{n=1}^{M} f_{n}(\mathbf{z}(t)), \quad \frac{d \log p(\mathbf{z}(t))}{d t}=\sum_{n=1}^{M} \operatorname{tr}\left(\frac{\partial f_{n}}{\partial \mathbf{z}}\right)

因此对于有M个隐藏状态的连续流模型来说,计算成本仅仅是O(M)\mathcal{O}\left(M\right),而平面归一化流的计算成本是O(M3)\mathcal{O}\left(M^{3}\right)

NF和CNF的比较:

image.png

image.png

通过ODE对时间序列建模

zt0p(zt0)z_{t_{0}} \sim p\left(z_{t_{0}}\right)

zt1,zt2,,ztN=ODESolve(zt0,f,θf,t0,,tN)z_{t_{1}}, z_{t_{2}}, \ldots, z_{t_{N}} =ODESolve(z_{t_0},f,\theta_f,t_0,\ldots,t_N)

eachxtip(xzti,θX)each \quad x_{t_i} \sim p(x|z_{t_i},\theta_X)

具体而言,在给定初始状态 z0z_0 和观测时间 t0,tNt_0,\ldots t_N 的情况下,该模型计算潜在状态 zt1ztNz_{t_1} \ldots z_{t_N} 和输出 xt1xtNx_{t_1} \ldots x_{t_N}。在实验部分,初始状态z0z_0由RNN编码产生,潜在状态zt1ztNz_{t_1} \ldots z_{t_N} 由ODESolve产生,其中的ff 用神经网络训练,然后利用VAE的方式从潜在状态中生成数据。

image.png

实验:从采样点进行螺旋线重建

image.png

均方差比较:

image.png

附录

伴随法的证明

对于z(t)z(t)

给定常微分方程:

dz(t)d(t)=f(z(t),t,θ)\frac{dz(t)}{d(t)}=f(z(t),t,\theta)

L(z(t1))=L(t0t1f(z(t),t,θ)dt)=L( ODESolve(z (t0),f,t0,t1,θ))\left.L\left(\mathbf{z}\left(t_{1}\right)\right)=L\left(\int_{t_{0}}^{t_{1}} f(\mathbf{z}(t), t, \theta) d t\right)=L\left(\text { ODESolve(z }\left(t_{0}\right), f, t_{0}, t_{1}, \theta\right)\right)

定义便随状态:

a(t)=L/z(t)a(t) = - \partial L / \partial \mathbf{z}(t)

则:

da(t)dt=a(t)f(z(t),t,θ)z(2)\frac{d a(t)}{d t}=-a(t)^{\top} \frac{\partial f(\mathbf{z}(t), t, \theta)}{\partial \mathbf{z}}\tag{2}

证明:

z(t+ε)=tt+εf(z(t),t,θ)dt+z(t)=Tε(z(t),t)\mathbf{z}(t+\varepsilon)=\int_{t}^{t+\varepsilon} f(\mathbf{z}(t), t, \theta) d t+\mathbf{z}(t)=T_{\varepsilon}(\mathbf{z}(t), t)

然后应用链式法则,有:

dLz(t)=dLdz(t+ε)dz(t+ε)dz(t) or a(t)=a(t+ε)Tε(z(t),t)z(t)\frac{d L}{\partial \mathbf{z}(t)}=\frac{d L}{d \mathbf{z}(t+\varepsilon)} \frac{d \mathbf{z}(t+\varepsilon)}{d \mathbf{z}(t)} \quad \text { or } \quad \mathbf{a}(t)=\mathbf{a}(t+\varepsilon) \frac{\partial T_{\varepsilon}(\mathbf{z}(t), t)}{\partial \mathbf{z}(t)}

利用导数定义,并进行泰勒展开进行化简计算:

da(t)dt=limε0+a(t+ε)a(t)ε=limε0+a(t+ε)a(t+ε)z(t)Tε(z(t))ε=limε0+a(t+ε)a(t+ε)z(t)(z(t)+εf(z(t),t,θ)+O(ε2))ε=limε0+a(t+ε)a(t+ε)(I+εf(z(t),t,θ)θz(t)+O(ε2))ε=limε0+εa(t+ε)f(z(t),t,θ)z(t)+O(ε2)ε=limε0+a(t+ε)f(z(t),t,θ)z(t)+O(ε)=a(t)f(z(t),t,θ)z(t)\begin{aligned} \frac{d \mathbf{a}(t)}{d t} &=\lim _{\varepsilon \rightarrow 0^{+}} \frac{\mathbf{a}(t+\varepsilon)-\mathbf{a}(t)}{\varepsilon} \\ &=\lim _{\varepsilon \rightarrow 0^{+}} \frac{\mathbf{a}(t+\varepsilon)-\mathbf{a}(t+\varepsilon) \frac{\partial}{\partial \mathbf{z}(t)} T_{\varepsilon}(\mathbf{z}(t))}{\varepsilon} \\ &=\lim _{\varepsilon \rightarrow 0^{+}} \frac{\mathbf{a}(t+\varepsilon)-\mathbf{a}(t+\varepsilon) \frac{\partial}{\partial \mathbf{z}(t)}\left(\mathbf{z}(t)+\varepsilon f(\mathbf{z}(t), t, \theta)+\mathcal{O}\left(\varepsilon^{2}\right)\right)}{\varepsilon} \\ &=\lim _{\varepsilon \rightarrow 0^{+}} \frac{\mathbf{a}(t+\varepsilon)-\mathbf{a}(t+\varepsilon)\left(I+\varepsilon \frac{\partial f(\mathbf{z}(t), t, \theta)}{\theta \mathbf{z}(t)}+\mathcal{O}\left(\varepsilon^{2}\right)\right)}{\varepsilon} \\ &=\lim _{\varepsilon \rightarrow 0^{+}} \frac{-\varepsilon \mathbf{a}(t+\varepsilon) \frac{\partial f(\mathbf{z}(t), t, \theta)}{\partial \mathbf{z}(t)}+\mathcal{O}\left(\varepsilon^{2}\right)}{\varepsilon} \\ &=\lim _{\varepsilon \rightarrow 0^{+}}-\mathbf{a}(t+\varepsilon) \frac{\partial f(\mathbf{z}(t), t, \theta)}{\partial \mathbf{z}(t)}+\mathcal{O}(\varepsilon) \\ &=-\mathbf{a}(t) \frac{\partial f(\mathbf{z}(t), t, \theta)}{\partial \mathbf{z}(t)} \end{aligned}

对于θ\thetatt

定义增强状态:

ddt[zθt](t)=faug([z,θ,t]):=[f([z,θ,t])01],aaug:=[aaθat],aθ(t):=dLdθ(t),at(t):=dLdt(t)\frac{d}{d t}\left[\begin{array}{l} \mathrm{z} \\ \theta \\ t \end{array}\right](t)=f_{\operatorname{aug}}([\mathrm{z}, \theta, t]):=\left[\begin{array}{c} f([\mathrm{z}, \theta, t]) \\ 0 \\ 1 \end{array}\right], \mathbf{a}_{a u g}:=\left[\begin{array}{l} \mathrm{a} \\ \mathrm{a}_{\theta} \\ \mathrm{a}_{t} \end{array}\right], \mathrm{a}_{\theta}(t):=\frac{d L}{d \theta(t)}, \mathrm{a}_{t}(t):=\frac{d L}{d t(t)}

其中θ\thetatt 无关,即dθ(t)/dt=0,dt(t)/dt=1d\theta(t) /dt=0,dt(t)/dt=1

计算雅可比行列式:

faug[z,θ,t]=[fzfθft000000]\frac{\partial f_{a u g}}{\partial[\mathbf{z}, \theta, t]}=\left[\begin{array}{ccc} \frac{\partial f}{\partial z} & \frac{\partial f}{\partial \theta} & \frac{\partial f}{\partial t} \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{array}\right]

直接将faugf_{aug}aauga_{aug} 代入上一小节的伴随法公式:

daaug(t)dt=[a(t)aθ(t)at(t)]faug[z,θ,t](t)=[afzafθaft](t)\frac{d \mathbf{a}_{a u g}(t)}{d t}=-\left[\begin{array}{lllll} \mathbf{a}(t) & \mathbf{a}_{\theta}(t) & \mathbf{a}_{t}(t) \end{array}\right] \frac{\partial f_{\text {aug}}}{\partial[\mathbf{z}, \theta, t]}(t)=-\left[\begin{array}{lll} \mathbf{a} \frac{\partial f}{\partial \mathbf{z}} & \mathbf{a} \frac{\partial f}{\partial \theta} & \mathbf{a} \frac{\partial f}{\partial t} \end{array}\right](t)

于是得到了最终的结论:

dLdθ=tNt0a(t)f(z(t),t,θ)θdt\frac{d L}{d \theta}=\int_{t_{N}}^{t_{0}} \mathbf{a}(t) \frac{\partial f(\mathbf{z}(t), t, \theta)}{\partial \theta} d t

dLdtN=a(tN)f(z(tN),tN,θ)tNdLdt0=tNt0a(t)f(z(t),t,θ)tdt\frac{d L}{d t_{N}}=-\mathbf{a}\left(t_{N}\right) \frac{\partial f\left(\mathbf{z}\left(t_{N}\right), t_{N}, \theta\right)}{\partial t_{N}} \quad \frac{d L}{d t_{0}}=\int_{t_{N}}^{t_{0}} \mathbf{a}(t) \frac{\partial f(\mathbf{z}(t), t, \theta)}{\partial t} d t

梯度变元定理的证明

给定常微分方程:

dz(t)d(t)=f(z(t),t)\frac{dz(t)}{d(t)}=f(z(t),t)

ff 要求对zz Lipschitz连续,对tt 连续。则对数概率密度满足:

logp(z(t))t=tr(dfdz(t))\frac{\partial \log p(\mathbf{z}(t))}{\partial t}=-\operatorname{tr}\left(\frac{d f}{d \mathbf{z}}(t)\right)

证明:

首先类似上面伴随法证明的过程,将z(t+ε)z(t+\varepsilon) 表示为Tε(z(t))T_{\varepsilon}(\mathbf{z}(t))

ff 要求对zz Lipschitz连续,对tt 连续。这是为了使方程满足Picard存在定理,使得解存在且唯一。

首先是要推导出

logp(z(t))t=tr(limε0+ϵzTε(z(t)))\frac{\partial \log p(z(t))}{\partial t}=-\operatorname{tr}\left(\lim _{\varepsilon \rightarrow 0^{+}} \frac{\partial}{\partial \epsilon} \frac{\partial}{\partial z} T_{\varepsilon}(z(t))\right)

过程:

logp(z(t))t=limε0+logp(z(t))logdetzTε(z(t))logp(z(t))ε=limε0+logdetzTε(z(t))ε=limε0+εlogdetzTε(z(t))εε=limε0+εdetzTε(z(t))detzTε(z(t))(log(z)zz=1=1)=(limε0+εdetzTε(z(t)))bounded (limε0+1detzTε(z(t)))=limε0+εdetzTε(z(t))\begin{aligned} \frac{\partial \log p(\mathbf{z}(t))}{\partial t} &=\lim _{\varepsilon \rightarrow 0^{+}} \frac{\log p(\mathbf{z}(t))-\log \left|\operatorname{det} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right|-\log p(\mathbf{z}(t))}{\varepsilon} \\ &=-\lim _{\varepsilon \rightarrow 0^{+}} \frac{\log \left|\operatorname{det} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right|}{\varepsilon}\\ &=-\lim _{\varepsilon \rightarrow 0^{+}} \frac{\frac{\partial}{\partial \varepsilon} \log \left|\operatorname{det} \frac{\partial}{\partial z} T_{\varepsilon}(\mathbf{z}(t))\right|}{\frac{\partial}{\partial \varepsilon} \varepsilon}\\ &=-\lim _{\varepsilon \rightarrow 0^{+}} \frac{\frac{\partial}{\partial \varepsilon}\left|\operatorname{det} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right|}{\left|\operatorname{det} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right|} \qquad \qquad \quad \left(\left.\frac{\partial \log (\mathbf{z})}{\partial \mathbf{z}}\right|_{\mathbf{z}=1}=1\right)\\ &=-\underbrace{\left(\lim _{\varepsilon \rightarrow 0+} \frac{\partial}{\partial \varepsilon}\left|\operatorname{det} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right|\right)}_{\text {bounded }}\left(\lim _{\varepsilon \rightarrow 0^{+}} \frac{1}{\left|\operatorname{det} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right|}\right)\\ &=-\lim _{\varepsilon \rightarrow 0^{+}} \frac{\partial}{\partial \varepsilon}\left|\operatorname{det} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right| \end{aligned}

第一步用到的是流模型中的公式(本质是概率密度上的雅可比公式),后面仅用到洛必达法则、链式法则等简单技巧。

然后应用雅可比公式:

logp(z(t))t=limε0+tr(adj(zTε(z(t)))εzTε(z(t)))=tr((limε0+adj(zTε(z(t))))=I(limε0+εzTε(z(t))))=tr(limε0+εzTε(z(t)))\begin{aligned} \frac{\partial \log p(\mathbf{z}(t))}{\partial t} &=-\lim _{\varepsilon \rightarrow 0^{+}} \operatorname{tr}\left(\operatorname{adj}\left(\frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right) \frac{\partial}{\partial \varepsilon} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right) \\ &=-\operatorname{tr}\left(\underbrace{\left(\lim _{\varepsilon \rightarrow 0^{+}} \operatorname{adj}\left(\frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right)\right)}_{=I}\left(\lim _{\varepsilon \rightarrow 0^{+}} \frac{\partial}{\partial \varepsilon} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right)\right) \\ &=-\operatorname{tr}\left(\lim _{\varepsilon \rightarrow 0^{+}} \frac{\partial}{\partial \varepsilon} \frac{\partial}{\partial \mathbf{z}} T_{\varepsilon}(\mathbf{z}(t))\right) \end{aligned}

雅可比公式是:

ddtdet(A(t))=tr(adj(A(t))ddtA(t))\frac{d}{dt}det(A(t))=tr(adj(A(t))\frac{d}{dt}A(t))

最后进行泰勒展开即可:

logp(z(t))t=tr(limε0+εz(z+εf(z(t),t)+O(ε2)+O(ε3)+))=tr(limε0+ε(I+zεf(z(t),t)+O(ε2)+O(ε3)+))=tr(limε0+(zf(z(t),t)+O(ε)+O(ε2)+))=tr(zf(z(t),t))\begin{aligned} \frac{\partial \log p(\mathbf{z}(t))}{\partial t} &=-\operatorname{tr}\left(\lim _{\varepsilon \rightarrow 0^{+}} \frac{\partial}{\partial \varepsilon} \frac{\partial}{\partial \mathbf{z}}\left(\mathbf{z}+\varepsilon f(\mathbf{z}(t), t)+\mathcal{O}\left(\varepsilon^{2}\right)+\mathcal{O}\left(\varepsilon^{3}\right)+\ldots\right)\right) \\ &=-\operatorname{tr}\left(\lim _{\varepsilon \rightarrow 0^{+}} \frac{\partial}{\partial \varepsilon}\left(I+\frac{\partial}{\partial \mathbf{z}} \varepsilon f(\mathbf{z}(t), t)+\mathcal{O}\left(\varepsilon^{2}\right)+\mathcal{O}\left(\varepsilon^{3}\right)+\ldots\right)\right) \\ &=-\operatorname{tr}\left(\lim _{\varepsilon \rightarrow 0^{+}}\left(\frac{\partial}{\partial \mathbf{z}} f(\mathbf{z}(t), t)+\mathcal{O}(\varepsilon)+\mathcal{O}\left(\varepsilon^{2}\right)+\ldots\right)\right) \\ &=-\operatorname{tr}\left(\frac{\partial}{\partial \mathbf{z}} f(\mathbf{z}(t), t)\right) \end{aligned}